<?php

class ectools_payment_select {

    public function select_pay_method(&$controller, &$sdf, $member_id = 0, $is_backend = false, $platform = array('iscommon','ispc'), $front_tpl = "site/common/choose_payment.html") {
        $payment_cfg = app::get('ectools')->model('payment_cfgs');
        $currency = app::get('ectools')->model('currency');
        $payments = array();
        if ($is_backend) {
            $platform[] = 'iswap';
        }
        $arrPayments = $payment_cfg->getList('*', array(
            'status' => 'true',
            'platform' => $platform,
            'is_frontend' => true
        ));
        $arrDefCurrency = $currency->getDefault();
        if (! $sdf['cur_code']) {
            $strDefCurrency = $arrDefCurrency['cur_code'];
        } else
            $strDefCurrency = $sdf['cur_code'];
        $currency = $sdf['cur'] ? $sdf['cur'] : $strDefCurrency;
        $def_payments = $sdf['def_payment'] ? $sdf['def_payment'] : '';
        $is_def_payment_match = false;
        $shop_def_currency = $arrDefCurrency['cur_code'];
        
        if ($def_payments) {
            $controller->pagedata['arr_def_payment'] = $payment_cfg->getPaymentInfo($def_payments);
            if ($def_payments == '-1')
                $is_def_payment_match = true;
        }
        
        if ($arrPayments) {
            foreach ($arrPayments as $key => $payment) { // 预售商品去掉线下支付
                if ($sdf['no_offline'] == 'true' && $payment['app_id'] == 'offline') {
                    unset($arrPayments[$key]);
                    continue;
                }
                
                if (! $is_backend && strpos($_SERVER['HTTP_USER_AGENT'], 'MicroMessenger') == false && ($payment['app_id'] == 'wxpay' || $payment['app_id'] == 'wxpayjsapi')) {
                    unset($arrPayments[$key]);
                    continue;
                }
                if (! $member_id) {
                    if (trim($payment['app_id']) == 'deposit') {
                        unset($arrPayments[$key]);
                        continue;
                    }
                }
                
                if (trim($payment['app_id']) == 'deposit') {
                    if ($shop_def_currency == $currency) {
                        if (isset($controller->pagedata['arr_def_payment']) && $controller->pagedata['arr_def_payment']) {
                            $arr_def_payment = $controller->pagedata['arr_def_payment'];
                            if ($arr_def_payment['app_id'] == $payment['app_id'])
                                $is_def_payment_match = true;
                        }
                        
                        $payments_key = $payment['app_order_by'] . $key;
                        $payments[$payments_key] = $payment;
                    }
                    continue;
                }
                
                if (trim($payment['app_id']) == 'offline') {
                    if (isset($controller->pagedata['arr_def_payment']) && $controller->pagedata['arr_def_payment']) {
                        $arr_def_payment = $controller->pagedata['arr_def_payment'];
                        if ($arr_def_payment['app_id'] == $payment['app_id'])
                            $is_def_payment_match = true;
                    }
                    $payments_key = $payment['app_order_by'] . $key;
                    $payments[$payments_key] = $payment;
                    continue;
                }
                
                if ($payment['supportCurrency'] && is_array($payment['supportCurrency'])) {
                    if (array_key_exists($currency, $payment['supportCurrency'])) {
                        if (isset($controller->pagedata['arr_def_payment']) && $controller->pagedata['arr_def_payment']) {
                            $arr_def_payment = $controller->pagedata['arr_def_payment'];
                            if ($arr_def_payment['app_id'] == $payment['app_id'])
                                $is_def_payment_match = true;
                        }
                        $payments_key = $payment['app_order_by'] . $key;
                        $payments[$payments_key] = $payment;
                    }
                }
            }
            ksort($payments);
            $controller->pagedata['def_payments'] = $def_payments;
            $controller->pagedata['arr_def_payment'] = (isset($_COOKIE['purchase']['payment']) && $_COOKIE['purchase']['payment']) ? unserialize($_COOKIE['purchase']['payment']) : '';
            $controller->pagedata['is_def_payment_match'] = ($is_def_payment_match) ? 1 : 0;
            $controller->pagedata['payments'] = &$payments;
            $controller->pagedata['order'] = &$sdf;
        }
        
        if (! $is_backend) {
            $str_html = $controller->fetch($front_tpl, $controller->pagedata['app_id']);
            $obj_ajax_View_help = kernel::service('ectools_payment_ajax_html');
            if (! $obj_ajax_View_help)
                return $str_html;
            else
                return $obj_ajax_View_help->get_html($str_html, 'ectools_payment_select', 'select_pay_method');
        } else {
            $str_html = $controller->fetch("admin/order/paymethod.html", $controller->pagedata['app_id']);
            $obj_ajax_View_help = kernel::service('ectools_payment_ajax_html');
            if (! $obj_ajax_View_help)
                return $str_html;
            else
                return $obj_ajax_View_help->get_html($str_html, 'ectools_payment_select', 'select_pay_method');
        }
    }

    public function change_def_payment(&$controller, $pay_app_id = 'alipay') {
        $payment_cfg = app::get('ectools')->model('payment_cfgs');
        if ($pay_app_id) {
            if ($pay_app_id == - 1)
                $pay_app_id = app::get('ectools')->_('货到付款');
            
            $controller->pagedata['arr_def_payment'] = $payment_cfg->getPaymentInfo($pay_app_id);
            $str_html = $controller->fetch("site/common/paymethod_def_info.html");
            $obj_ajax_View_help = kernel::service('ectools_payment_ajax_html');
            if (! $obj_ajax_View_help)
                return $str_html;
            else
                return $obj_ajax_View_help->get_html($str_html, 'ectools_payment_select', 'change_def_payment');
        }
    }
}
